﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using FrbaBus.Properties;

namespace FrbaBus.AbmMicro
{
    public partial class FormAbmMicro : Form
    {
        public FormAbmMicro()
        {
            InitializeComponent();
            CargarCombosFiltros();
            CargarCombos();

            txModelo.Enabled = false;
            txPatente.Enabled = false;
            cbMarca.Enabled = false;
            cbTipoServicio.Enabled = false;
            cbPisos.Enabled = false;
            txCantButacas.Enabled = false;
            txCantKg.Enabled = false;

            btnGuardar.Enabled = false;
            btnCancelar.Enabled = false;

             
            tabla.Columns.Add("mic_codigo", "CODIGO");
            tabla.Columns.Add("mic_patente", "PATENTE");
            tabla.Columns.Add("marc_nombre", "MARCA");
            tabla.Columns.Add("mic_modelo", "MODELO");
            tabla.Columns.Add("serv_nombre", "SERVICIO");

            tabla.Columns.Add("mic_cant_pisos", "PISOS");
            tabla.Columns.Add("mic_cant_butacas", "BUTACAS");
            tabla.Columns.Add("mic_kg_disponibles", "KGS DISPONIBLES");
    
            tabla.Columns.Add("mic_fecha_alta", "ALTA");
            tabla.Columns.Add("mic_fecha_baja_definitiva", "BAJA");
            tabla.Columns.Add("mic_habilitado", "HABILITADO");
            tabla.Columns.Add("mic_eliminado", "ELIMINADO");


            Cargar_Grilla(0);
          }

        private void Cargar_Grilla(int accion)
        {
            //accion : 0: busqueda o recarga del formulario , 1: limpiar formulario

            tabla.Rows.Clear();

            string query;

            query = " SELECT mic_codigo, mic_patente, marc_nombre, mic_modelo, serv_nombre, mic_cant_pisos, mic_cant_butacas, mic_kg_disponibles, mic_fecha_alta, mic_fecha_baja_definitiva, mic_habilitado, mic_eliminado ";
            query += " FROM THE_BEST_IAS.micros MI ";
            query += " INNER JOIN THE_BEST_IAS.marcas MA ON MA.marc_codigo=MI.marc_codigo ";
            query += " INNER JOIN THE_BEST_IAS.servicios SE ON SE.serv_codigo=MI.serv_codigo ";
            query += " AND MI.mic_eliminado = 0";

            //Filtros

            if (txNroMicro_F.Text.Trim() != string.Empty)
                query += " AND mic_codigo = " + txNroMicro_F.Text.Trim().ToString();

            if (txModelo_F.Text.Trim() != string.Empty)
                query += " AND mic_modelo like '%" + txModelo_F.Text.Trim().ToString() + "%'";

            if (txPatente_F.Text.Trim() != string.Empty)
                query += " AND mic_patente like '%" + txPatente_F.Text.Trim().ToString() + "%'";
           
            if (cbMarca_F.SelectedIndex > -1)
            {

                query += " AND MA.marc_nombre = '" + cbMarca_F.Text + "'";
            }

            if (cbTipoServicio_F.SelectedIndex > -1)
            {
                query += " AND serv_nombre = '" + cbTipoServicio_F.Text + "'";
            }

            if (txCantButacas_F.Text.Trim() != string.Empty)
                query += " AND mic_cant_butacas = " + txCantButacas_F.Text.Trim().ToString();

            if (txCantKg_F.Text.Trim() != string.Empty)
                query += " AND mic_kg_disponibles= " + txCantKg_F.Text.Trim().ToString();
          
            if (cbPisos_F.SelectedIndex > -1)
            {
                 query += " AND mic_cant_pisos = " + cbPisos_F.Text;
            }

            if (rbActivo.Checked) {
                query += " AND mic_habilitado = 1 AND mic_eliminado = 0";
            }
            if (rbBaja.Checked)
            {
                query += " AND mic_habilitado = 0 AND mic_eliminado = 1";
            }
            if (rbBajaServicio.Checked)
            {
                query += " AND mic_habilitado = 0 AND mic_eliminado = 0";
            } 
            

            query += " ORDER BY 1";

            SqlDataReader dr = DbHelper.ExecuteQuery(query);

            if (dr.HasRows)
            {
                while (dr.Read())
                {
                    tabla.Rows.Add(new object[] { 
                           dr["mic_codigo"].ToString().Trim(), 
                           dr["mic_patente"].ToString().Trim(), 
                           dr["marc_nombre"].ToString().Trim(), 
                           dr["mic_modelo"].ToString().Trim(), 
                           dr["serv_nombre"].ToString().Trim(), 
                           dr["mic_cant_pisos"].ToString().Trim(),
                           dr["mic_cant_butacas"].ToString().Trim(),
                           dr["mic_kg_disponibles"].ToString().Trim(),
                           dr["mic_fecha_alta"].ToString().Trim(),
                           dr["mic_fecha_baja_definitiva"].ToString().Trim(),
                           dr["mic_habilitado"].ToString().Trim(),
                           dr["mic_eliminado"].ToString().Trim(),

                         });
                }
            }else {
                if (accion == 0)
                {
                    MessageBox.Show("No se encontraron micros para su búsqueda, por favor, considerar sus filtros", "INFORMACION");
                }
             }
        
        }

        private void FormAbmMicro_Load(object sender, EventArgs e)
        {

        }

        private void buBuscar_Click(object sender, EventArgs e)
        {
            Cargar_Grilla(0);
        }

        private void buLimpiar_Click(object sender, EventArgs e)
        {
            txNroMicro_F.Text = "";
            txModelo_F.Text = "";
            txPatente_F.Text = "";
            cbMarca_F.SelectedIndex = -1;
            cbTipoServicio_F.SelectedIndex = -1;
            cbPisos_F.SelectedIndex = -1;
            txCantButacas_F.Text = "";
            txCantKg_F.Text = "";
            Cargar_Grilla(1);
            txNroMicro_F.Focus();
        }

        private void CargarCombosFiltros()
        {
            string query = "";

            query = "select distinct serv_nombre from THE_BEST_IAS.servicios order by 1";

            SqlDataReader dr = DbHelper.ExecuteQuery(query);

            if (dr.HasRows)
            {
                int i = 0;
                while (dr.Read())
                {
                    cbTipoServicio_F.Items.Insert(i, dr[0].ToString());
                    i++;
                }
            }


            cbPisos_F.Items.Insert(0, "1");
            cbPisos_F.Items.Insert(1, "2");

            query = "";

            query = "select distinct marc_nombre from THE_BEST_IAS.marcas MA join THE_BEST_IAS.micros MI on MA.marc_codigo=MI.marc_codigo";

            SqlDataReader dr2 = DbHelper.ExecuteQuery(query);

            if (dr2.HasRows)
            {
                int i = 0;
                while (dr2.Read())
                {
                    cbMarca_F.Items.Insert(i,dr2[0].ToString());
                    i++;
                }
            }
         
            
        }

        private void CargarCombos()
        {
            string query = "";

            query = "select distinct serv_nombre from THE_BEST_IAS.servicios order by 1";

            SqlDataReader dr = DbHelper.ExecuteQuery(query);

            if (dr.HasRows)
            {
                int i = 0;
                while (dr.Read())
                {
                    cbTipoServicio.Items.Insert(i,dr[0].ToString());
                    i++;
                }
            }


            cbPisos.Items.Insert(0, "1");
            cbPisos.Items.Insert(1, "2");

            query = "";

            query = "select distinct marc_nombre from THE_BEST_IAS.marcas MA join THE_BEST_IAS.micros MI on MA.marc_codigo=MI.marc_codigo";

            SqlDataReader dr2 = DbHelper.ExecuteQuery(query);

            if (dr2.HasRows)
            {
                int i = 0;
                while (dr2.Read())
                {
                    cbMarca.Items.Insert(i, dr2[0].ToString());
                    i++;
                }
            }


        }



        //void tabla_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        //{
        //    if (tabla.SelectedRows.Count > 0 && tabla.SelectedRows[0].Cells[0].Value != null)
        //    {
        //        FormButacas form = new FormButacas(tabla.SelectedRows[0].Cells[0].Value.ToString());
        //        form.ShowDialog(this);
        //    }
        //}


        private void btnMicroAlta_Click(object sender, EventArgs e)
        {

            txModelo.Enabled = true;
            txPatente.Enabled = true;
            cbMarca.Enabled = true;
            cbTipoServicio.Enabled = true;
            cbPisos.Enabled = true;
            txCantButacas.Enabled = true;
            txCantKg.Enabled = true;

            btnGuardar.Enabled = true;
            btnCancelar.Enabled = true;


            tabla.ClearSelection();  
                                            
        }



        private void btnModificar_Click(object sender, EventArgs e)
        {
            if (!(tabla.SelectedRows.Count > 0))
            {
                MessageBox.Show("Debe seleccionar al menos un micro de la grilla para modificar", "ERROR");
            }
            else {

                txModelo.Enabled = true;
                txPatente.Enabled = true;
                cbMarca.Enabled = true;
                cbTipoServicio.Enabled = true;
                cbPisos.Enabled = true;
                txCantButacas.Enabled = true;
                txCantKg.Enabled = true;

                btnGuardar.Enabled = true;
                btnCancelar.Enabled = true;
            

                long microAmodificar = Convert.ToInt64(tabla.SelectedRows[0].Cells[0].Value.ToString());
                txPatente.Text = tabla.SelectedRows[0].Cells[1].Value.ToString();
                txModelo.Text = tabla.SelectedRows[0].Cells[3].Value.ToString();
                txCantButacas.Text = tabla.SelectedRows[0].Cells[6].Value.ToString();
                txCantKg.Text = tabla.SelectedRows[0].Cells[7].Value.ToString();
                cbMarca.SelectedItem = tabla.SelectedRows[0].Cells[2].Value.ToString();
                cbPisos.SelectedItem = tabla.SelectedRows[0].Cells[5].Value.ToString();
                cbTipoServicio.SelectedItem = tabla.SelectedRows[0].Cells[4].Value.ToString();
            }


        }

        private void btnEliminar_Click(object sender, EventArgs e)
        {

            if (!(tabla.SelectedRows.Count > 0))
            {
                MessageBox.Show("Debe seleccionar al menos un micro de la grilla para dar de baja", "ERROR");
            }
            else
            {
                this.Hide();

                FormDatosBaja form = new FormDatosBaja(Convert.ToInt64(tabla.SelectedRows[0].Cells[0].Value.ToString()));
                form.ShowDialog(this);

                
            }



        }

        private void btnBajaServicio_Click(object sender, EventArgs e)
        {
            if (!(tabla.SelectedRows.Count > 0))
            {
                MessageBox.Show("Debe seleccionar al menos un micro de la grilla para darlo de baja de servicio", "ERROR");
            }
            else
            {
                this.Hide();

                FormDatosBajaServicio form = new FormDatosBajaServicio(Convert.ToInt64(tabla.SelectedRows[0].Cells[0].Value.ToString()));
                form.ShowDialog(this);
            }

        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
                
            //cuando pongo nuevo, deselecciono de la grilla, entonces luego cuando ponga guardar chequeo si hay seleccion
            //si no hay seleccion, es alta, sino es modificacion

            if (!(tabla.SelectedRows.Count > 0))
            {

                //ALTA 

                long codigoMicro = 0;

                var errores = validarMicro();

                //Si no hay errores
                if (errores.ToString() == String.Empty)
                {
                    
                    string sConnectionString = Settings.Default.GD1C2013ConnectionString;
                    SqlConnection connection = new SqlConnection(sConnectionString);
                    SqlCommand cmd = new SqlCommand("THE_BEST_IAS.pr_alta_micro", connection);
            
                    cmd.CommandType = CommandType.StoredProcedure;

                    cmd.Parameters.Add(new SqlParameter("@p_mic_modelo", SqlDbType.NVarChar)).Value = txModelo.Text.Trim();
                    cmd.Parameters.Add(new SqlParameter("@p_mic_patente", SqlDbType.NVarChar)).Value = txPatente.Text.Trim();
                    cmd.Parameters.Add(new SqlParameter("@p_marc_nombre", SqlDbType.NVarChar)).Value = cbMarca.Text.Trim();
                    cmd.Parameters.Add(new SqlParameter("@p_serv_nombre", SqlDbType.NVarChar)).Value = cbTipoServicio.Text.ToString();
                    cmd.Parameters.Add(new SqlParameter("@p_mic_cant_pisos", SqlDbType.Int)).Value = Convert.ToInt16(cbPisos.Text.Trim().ToString());
                    cmd.Parameters.Add(new SqlParameter("@p_mic_cant_butacas", SqlDbType.Int)).Value = Convert.ToInt16(txCantButacas.Text.Trim().ToString());
                    cmd.Parameters.Add(new SqlParameter("@p_mic_kg_disponibles", SqlDbType.Int)).Value = Convert.ToInt64(txCantKg.Text.Trim());
                    cmd.Parameters.Add(new SqlParameter("@p_mic_fecha_alta", SqlDbType.DateTime)).Value = Fechas.fechaSistema;

               

                    cmd.Parameters.Add(new SqlParameter("@p_mic_codigo", SqlDbType.Int));
                    cmd.Parameters["@p_mic_codigo"].Direction = ParameterDirection.Output;

                    connection.Open();
                    cmd.ExecuteNonQuery(); 
                    codigoMicro = (int)cmd.Parameters["@p_mic_codigo"].Value;
                    connection.Close();
 
                    this.Hide();

                    FormButacas form = new FormButacas(codigoMicro, Convert.ToInt32(txCantButacas.Text));
                    form.ShowDialog(this);

                    
                }
                else
                {
                    MessageBox.Show(errores.ToString());
                    return;
                }

            }
            else { 
            
                //MODIFICACION

                var errores = validarMicro();

                //Si no hay errores
                if (errores.ToString() == String.Empty)
                {
                    string sConnectionString = Settings.Default.GD1C2013ConnectionString;
                    SqlConnection connection = new SqlConnection(sConnectionString);
                    SqlCommand cmd = new SqlCommand("THE_BEST_IAS.pr_modif_micro", connection);

                    cmd.CommandType = CommandType.StoredProcedure;

                    cmd.Parameters.Add(new SqlParameter("@p_mic_codigo", SqlDbType.BigInt)).Value = Convert.ToInt64(tabla.SelectedRows[0].Cells[0].Value.ToString());
                    cmd.Parameters.Add(new SqlParameter("@p_mic_modelo", SqlDbType.NVarChar)).Value = txModelo.Text.Trim();
                    cmd.Parameters.Add(new SqlParameter("@p_mic_patente", SqlDbType.NVarChar)).Value = txPatente.Text.Trim();
                    cmd.Parameters.Add(new SqlParameter("@p_marc_nombre", SqlDbType.NVarChar)).Value = cbMarca.Text.Trim();
                    cmd.Parameters.Add(new SqlParameter("@p_serv_nombre", SqlDbType.NVarChar)).Value = cbTipoServicio.Text.ToString();
                    cmd.Parameters.Add(new SqlParameter("@p_mic_cant_pisos", SqlDbType.Int)).Value = Convert.ToInt16(cbPisos.Text.Trim().ToString());
                    cmd.Parameters.Add(new SqlParameter("@p_mic_cant_butacas", SqlDbType.Int)).Value = Convert.ToInt16(txCantButacas.Text.Trim().ToString());
                    cmd.Parameters.Add(new SqlParameter("@p_mic_kg_disponibles", SqlDbType.Int)).Value = Convert.ToInt64(txCantKg.Text.Trim());
                    cmd.Parameters.Add(new SqlParameter("@p_mic_fecha_alta", SqlDbType.DateTime)).Value = Fechas.fechaSistema;

                    connection.Open();
                    cmd.ExecuteNonQuery();
                    connection.Close();

                    this.Hide();

                    long micro = Convert.ToInt64(tabla.SelectedRows[0].Cells[0].Value.ToString());

                    FormButacas form = new FormButacas(micro);
                    form.ShowDialog(this);
                }
                else
                {
                    MessageBox.Show(errores.ToString());
                    return;
                }


            }

        }

        private StringBuilder validarMicro()
        {
            var errores = new StringBuilder();



            if (txModelo.Text == String.Empty)
            {
                errores.Append("Por favor, ingrese el campo MODELO antes de continuar");
                errores.AppendLine();
            }
            if (txPatente.Text == String.Empty)
            {
                errores.Append("Por favor, ingrese el campo PATENTE antes de continuar");
                errores.AppendLine();
            }
            if (cbMarca.Text == String.Empty)
            {
                errores.Append("Por favor, seleccione una MARCA antes de continuar");
                errores.AppendLine();
            }
            if (cbTipoServicio.Text == String.Empty)
            {
                errores.Append("Por favor, seleccione un TIPO DE SERVICIO antes de continuar");
                errores.AppendLine();
            }
            if (cbPisos.Text == String.Empty)
            {
                errores.Append("Por favor, seleccione la cantidad de PISOS antes de continuar");
                errores.AppendLine();
            }
            if (txCantButacas.Text == String.Empty)
            {
                errores.Append("Por favor, ingrese la cantidad de BUTACAS antes de continuar");
                errores.AppendLine();
            }
            if (txCantKg.Text == String.Empty)
            {
                errores.Append("Por favor, ingrese la cantidad de KILOGRAMOS DISPONIBLES antes de continuar");
                errores.AppendLine();
            }
            return errores;
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            btnGuardar.Enabled = false;
            btnCancelar.Enabled = false;
 

            //Limpio campos del formulario alta/modificacion
            txModelo.Text = "";
            txPatente.Text = "";
            cbMarca.SelectedIndex = -1;
            cbTipoServicio.SelectedIndex = -1;
            cbPisos.SelectedIndex = -1;
            txCantButacas.Text = "";
            txCantKg.Text = "";
            txNroMicro_F.Focus();
        }

    }
}
